package com.xinzhi.savingpot.configure;


import com.xinzhi.savingpot.interceptor.BanInterceptor;
import com.xinzhi.savingpot.interceptor.TokenInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @author Zeng
 * @date 2020/2/17 11:18
 */
@Configuration
/**
 * WebMvcConfigurer 是用来全局制定 Spring Boot 的 mvc 特性。
 * 开发者通过实现 WebMvcConfigurer 接口来配置应用的 MVC 全局特性。
 */
public class WebMvcConfiguer implements WebMvcConfigurer {

    /**
     * 通过 addInterceptors方法可以设置多个拦截器，
     * 比如对特定的 URI 设定拦截器以检查用户是否登录，
     * 打印处理用户请求耗费的时间等。
     *
     * @param registry 拦截器
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(getTokenInterceptor())
                .addPathPatterns("/index/**");//访问以/admin/为前缀的所有路径都需要对token进行验证
    }

    /**
     * 允许所有跨域访问，或者更为精细的控制
     *
     * @param registry 跨域访问
     */
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/api/**")
                .allowedOrigins("http://doain2.com")
                .allowedMethods("POST", "GET");
    }

    /**
     * 应用有时候没有必要为一个 URL 制定一个Controller方法，
     * 可以直接将 URI 请求转到对应的模版渲染上。
     * 可以直接通过 ViewControllerRegistry 注册一个
     *
     * @param registry 注册Controller
     */
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/index.html").setViewName("/index.html");
        registry.addRedirectViewController("/**/*.do", "/index.html");
    }

    @Bean
    public TokenInterceptor getTokenInterceptor() {
        return new TokenInterceptor();
    }



}
